package com.cs.paoyer.administration.business.entity;


//import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
//import java.util.HashMap;
//import java.util.Vector;
//import java.sql.PreparedStatement;
//import java.util.Iterator;

import com.cs.paoyer.administration.business.model.FDClassVO;
//import com.cs.paoyer.administration.business.model.ContractVO;
//import com.cs.paoyer.common.exception.UserException;
//import com.cs.paoyer.common.exception.SystemException;

/**
 * DAO para realizar las consultas de las clases de fondos documentales.
 * 
 * @author Rene.Rangel@consult-soft.com
 * @version 1.0
 */

public class FDClassDAO
{
  /**
   * Conexion a la base de datos.
   */
  private Connection conn = null;

  /**
   * Constructor que recibe como parametro la conexion con la base de datos.
   * @param conn Conexion con la base de datos.
   */
  
  public FDClassDAO(Connection conn){
    this.conn = conn;
  }

  
    public Collection findFDClassByCriterea(FDClassVO criterea) throws SQLException 
    {
    
      
				String query = "SELECT clfd.* FROM tge_clase_fondo_documental clfd";

				String filters = "";
				// Filtro por codigo interno de clase de fondo documental
				if ( (criterea.getCode() != null) && !(criterea.getCode().longValue()==0) ) 
				{
						if(filters.equals(""))
						{
								filters = " clfd.codigo=" + criterea.getCode() ;
						}
						else
						{
								filters = " AND clfd.codigo=" + criterea.getCode() ;
						}

						
				}
				// Filtro Prefijo de la Clase de Fondo Documental
				if ( (criterea.getPrefix() != null) && !(criterea.getPrefix().equals("")) ) 
				{
						if ( filters.equals("") ) 
						{
								filters = filters + " clfd.prefijo='" + criterea.getPrefix()+"'";
						}
						else
						{
								filters = filters + " AND clfd.prefijo='" + criterea.getPrefix()+"'";
						}
				}  
				// Filtro por Nombre de la Clase de Fondo Documental
				if ( (criterea.getName() != null) && !(criterea.getName().equals("")) ) 
				{
					if ( filters.equals("") ) 
						{
								filters = filters + " UPPER(clfd.nombre) LIKE '%" + criterea.getName().toUpperCase() + "%'";
						}
						else
						{
								filters = filters + " AND UPPER(clfd.nombre) LIKE '%" + criterea.getName().toUpperCase() + "%'";
						}
				}

				// Si hay filtros, entonces armar la clausula WHERE 
				if ( !filters.equals("") ) {
					query = query + " where " + filters;
				}

				Statement stm = null;
				ResultSet rst = null;
				ArrayList fdClasses = new ArrayList();
				stm = conn.createStatement();
				rst = stm.executeQuery(query);
				FDClassVO fdClass = null;
				while ( rst.next() ) 
				{
					  fdClass = new FDClassVO();
						fdClass.setCode(new Long(rst.getLong("codigo")));
						fdClass.setPrefix(rst.getString("prefijo"));
						fdClass.setName(rst.getString("nombre"));
						fdClasses.add(fdClass);
						fdClass = null;
			 }
         
			 stm.close();
			 return fdClasses;
  }
  
		  
}